﻿using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Security.Principal;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using App_Negocio;
using System.Collections.Generic;

public partial class AsignarInvitados : System.Web.UI.Page
{
    static int invitadosRestantes;
    static int bandera;
    static int mesaAnterior = -1;

    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            IPrincipal p = HttpContext.Current.User;
            if (!p.IsInRole("Cliente"))
            {
                Session["Mensaje"] = "Usted no posee los permisos necesarios para ingresar a esta pagina";

                if (Session["Identificador"] != null)
                {
                    //ESTO NUNCA OCURRE
                }
                else
                {
                    Response.Redirect("login.aspx");
                }
            }
            else
            {   
                Session["MesaxInvitado"] = new LinkedList<AsignarInvitadosGui>();
                App_Negocio.Evento evento = (App_Negocio.Evento)Session["EventoSeleccionado"];
                invitadosRestantes = evento.CantPersonas;// -evento.cantidadInvitados();
                imgDistribucion.ImageUrl = evento.ImgDistribucionMesa;

                cargarMesas(ddlNroMesa, evento);
                cargarCblMenu(evento);
                bandera = 0;
            }
        }
    }
    
    public void cargarMesas(DropDownList ddlMesa, App_Negocio.Evento evento)
    {
        App_Negocio.Mesa mesa= new App_Negocio.Mesa();
        LinkedList<Mesa> mesas= mesa.mesaxEventoList(evento);
                
        ddlMesa.DataSource = mesas;
        ddlMesa.DataTextField = "Nro";
        ddlMesa.DataValueField = "IdMesa";
        ddlMesa.DataBind();        
    }

    protected void cargarCblMenu(App_Negocio.Evento evento)
    {
        App_Negocio.Menu menu = new App_Negocio.Menu();
                
        List<App_Negocio.Menu> menues = App_Negocio.Menu.listarMenu_ListaxEvento(evento);
        cblMenu.DataSource = menues;
        cblMenu.DataTextField = "Nombre";
        cblMenu.DataValueField = "Id";
        cblMenu.DataBind();
      }

    protected void btnConfirmar_Click(object sender, EventArgs e)
    {
        this.guardarMesa();
        Response.Redirect("Eventos_de_Cliente.aspx");
    }

    protected void gvInvitados_BorrarFila(object sender, GridViewDeleteEventArgs e)
    {
        LinkedList<AsignarInvitadosGui> invList = (LinkedList<AsignarInvitadosGui>)Session["MesaxInvitado"];
        AsignarInvitadosGui aIg = invList.ElementAt<AsignarInvitadosGui>(gvInvitados.SelectedIndex);              
        invList.Remove(aIg);
        gvInvitados.DataSource = invList;
        gvInvitados.DataBind();
        Session["MesaxInvitado"] = invList;

        invitadosRestantes++;
        lblInvRestantes.Text = "" + invitadosRestantes;
    }
   
    protected void ddlNroMesa_SelectedIndexChanged(object sender, EventArgs e)
    {
        txtApellido.Text = string.Empty;
        txtNombre.Text = string.Empty;
        txtDni.Text = string.Empty;

        if (Session["MesaxInvitado"] != null)
        {
            if (bandera == 1)
            {
                this.guardarMesa();
                borrarGrilla(gvInvitados);
                cargarInvitadosxMesa(int.Parse(ddlNroMesa.SelectedValue));
            }
            bandera = 1;
            mesaAnterior = int.Parse(ddlNroMesa.SelectedValue);
        }
        else
        {
            borrarGrilla(gvInvitados);
            cargarInvitadosxMesa(int.Parse(ddlNroMesa.SelectedValue));
        }
    } 
    
    protected void guardarMesa() {

        App_Negocio.Mesa mesaGuardar = new App_Negocio.Mesa();
        mesaGuardar.Nro = mesaAnterior;

        LinkedList<AsignarInvitadosGui> listInvitados = (LinkedList<AsignarInvitadosGui>)Session["MesaxInvitado"];
       
        List<Invitado> listaInvitados = new List<Invitado>();

        foreach (AsignarInvitadosGui invDet in listInvitados)
        {
            App_Negocio.Invitado inv = new Invitado();
            inv = invDet.Invitado;
            listaInvitados.Add(inv);
        }

        mesaGuardar.InvitadoList = listaInvitados;
        App_Negocio.Evento evento = (App_Negocio.Evento)Session["EventoSeleccionado"];
        mesaGuardar.guardarMesa(evento.Id);
        Session["MesaxInvitado"] = new LinkedList<AsignarInvitadosGui>();       
    }
    
    protected void borrarGrilla(GridView grilla)
    {
        DataView dv = new DataView();
        grilla.DataSource = dv;
        grilla.DataBind();
    }

    protected void cargarInvitadosxMesa(int mesa)
    {
        //ademas de lo que esta trayendo tendria que traer el precio real y precio estimado
        App_Negocio.Invitado inv = new  App_Negocio.Invitado();
        DataTable dt = inv.listarInvitadosxMesa(mesa);
        DataView dv = dt.DefaultView;
        gvInvitados.DataSource = dv;
        gvInvitados.DataKeyNames = new string[] { "Nombre", "Apellido", "Menu" };
        gvInvitados.DataBind();        
    }

    protected void gvInvitados_SelectedIndexChanged(object sender, EventArgs e)
    {

    }
   
    protected void btnAgregar_Click1(object sender, EventArgs e)
    {
        LinkedList<AsignarInvitadosGui> invList = (LinkedList<AsignarInvitadosGui>)Session["MesaxInvitado"];
        App_Negocio.Invitado invitado = new Invitado();
        invitado.Apellido = txtApellido.Text;
        invitado.Nombre = txtNombre.Text;
        App_Negocio.Menu menu = new App_Negocio.Menu();
        menu.Id = int.Parse(cblMenu.SelectedValue);

        App_Negocio.Menu_Tipo mTipo = new Menu_Tipo();
        mTipo.Nombre = cblMenu.SelectedItem.ToString();
        menu.Menu_tipo_ref = mTipo;
        invitado.Menu = menu;
        if (txtDni.Text != "")
        {
            invitado.Dni = int.Parse(txtDni.Text);
        }
        else
        {
            invitado.Dni = -1;
        }

        if (invList != null)
        {

            if (invList.Count > 7)
            {
                //Cartel que diga q ya hay 8 invitados en esa mesa
            }
            else
            {
                invList.AddLast(new AsignarInvitadosGui(invitado, int.Parse(ddlNroMesa.SelectedValue)));
                invitadosRestantes--;
                lblInvRestantes.Text = "" + invitadosRestantes;               
            }
        }
        else
        {
            invList.AddLast(new AsignarInvitadosGui(invitado, int.Parse(ddlNroMesa.SelectedValue)));
            invitadosRestantes--;
            lblInvRestantes.Text = "" + invitadosRestantes;
        }
        gvInvitados.DataSource = invList;
        gvInvitados.DataBind();
        Session["MesaxInvitado"] = invList;               
    }
    
    private class AsignarInvitadosGui
    {
        private App_Negocio.Invitado invitado;

        public App_Negocio.Invitado Invitado
        {
            get { return invitado; }
            set { invitado = value; }
        }

        private string nombre;

        public string Nombre
        {
            get { return nombre; }
            set { nombre = value; }
        }
        private string apellido;

        public string Apellido
        {
            get { return apellido; }
            set { apellido = value; }
        }
        private string menu;

        public string Menu
        {
            get { return menu; }
            set { menu = value; }
        }

        private int mesa;
        public int Mesa
        {
            get { return mesa; }
            set { mesa = value; }
        }
        
        public AsignarInvitadosGui(App_Negocio.Invitado fuente, int mesa)
        {
            this.Invitado = new Invitado();
            this.invitado.Nombre = fuente.Nombre;
            nombre = fuente.Nombre;
            this.invitado.Apellido = fuente.Apellido;
            apellido = fuente.Apellido;
            this.invitado.Dni = fuente.Dni;
            App_Negocio.Menu men = new App_Negocio.Menu();
            men.Id = fuente.Menu.Id;
            App_Negocio.Menu_Tipo mTipo = new Menu_Tipo();
            mTipo.Nombre = fuente.Menu.Menu_tipo_ref.Nombre;
            men.Menu_tipo_ref = mTipo;
            menu = mTipo.Nombre;
            this.invitado.Menu = men;
            this.mesa = mesa;
        }
    }

    protected void btnCancelar_Click(object sender, EventArgs e)
    {
        Response.Redirect("Eventos_de_Cliente.aspx");
    }
}
